package com.tsyz.servlet.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 请求处理时间统计拦截器，用于记录请求处理各阶段的耗时信息
 * 继承自BaseInterceptor，复用通用功能
 */
@Slf4j
@Component
public class RequestTimingInterceptor extends BaseInterceptor {

    /**
     * 预处理方法，在请求处理之前执行
     *
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param handler  处理器对象
     * @return boolean 是否继续执行后续处理
     */
    @Override
    protected boolean doPreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 时间统计和TraceId处理已在BaseInterceptor中完成
        // 这里可以添加其他特定逻辑
        return true; // 返回true继续执行，false中断执行
    }

    /**
     * 后处理方法，在请求处理完成后、视图渲染之前执行
     *
     * @param request      HTTP请求对象
     * @param response     HTTP响应对象
     * @param handler      处理器对象
     * @param modelAndView 模型和视图对象
     */
    @Override
    protected void doPostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 时间统计已在BaseInterceptor中完成
        // 这里可以添加其他特定逻辑
    }

    /**
     * 请求完成后的回调方法，在请求完全结束后执行
     *
     * @param request  HTTP请求对象
     * @param response HTTP响应对象
     * @param handler  处理器对象
     * @param ex       处理过程中抛出的异常
     */
    @Override
    protected void doAfterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 时间统计和异常处理已在BaseInterceptor中完成
        // 这里可以添加其他特定逻辑
    }
}
